﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using DTO;
using System.Data;

namespace GUI.Admin.uc
{
    public partial class Ad_NhanVienUC : System.Web.UI.UserControl
    {
        #region Khai báo
        private NhanVienBLL _nvBLL;
        private NhanVienDTO _nvDTO;
        private List<NhanVienDTO> _lst;
        private CommonBLL _cmBLL;
        #endregion

        #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            /*
                 * Khi Form load thì thực hiện các thao tác sau:
                 * 1. Hiển thị Panel danh sách nhân viên           
                 * 2. Ẩn Panel thêm, sửa thông tin nhân viên           
                 * 3. Load dữ liệu vào Gridview
                 * 4. Hiển thị tổng số nhân viên vào Label
                 */
            if (!IsPostBack)
            {
                try
                {
                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                catch (Exception ex)
                {
                    Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
                }
            }
        }
        #endregion

        #region Phương thức hiển thị danh sách nhân viên vào gridview
        /// <summary>
        /// Phương thức hiển thị danh sách nhân viên vào gridview
        /// </summary>
        private void LoadDuLieu()
        {
            _nvBLL = new NhanVienBLL();
            _lst = new List<NhanVienDTO>();

            try
            {
                this.PanelDanhSachNhanVien.Visible = true;
                this.PanelThemSuaNhanVien.Visible = false;

                _lst = _nvBLL.GetListNhanVien();
                GridViewNhanVien.DataSource = _lst;
                GridViewNhanVien.DataBind();

                // Hiển thị tổng số nhân viên vào Label
                int d = _lst.Count;
                this.LabelTongSoNhanVien.Text = Convert.ToString(d);
                if (d == 0)
                {
                    this.LabelThongBao.Text = "Chưa có nhân viên nào !";
                    this.LabelThongBao.Visible = true;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region ImageButtonThemMoi_Click
        protected void ImageButtonThemMoi_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                // Ẩn Panel danh sách
                this.PanelDanhSachNhanVien.Visible = false;

                // Hiển thị Panel thêm mới
                this.PanelThemSuaNhanVien.Visible = true;

                // Xóa text trong textbox
                this.XoaText();

                // Tạo mã số tự động
                TaoMaSoTuDongBLL _mstd = new TaoMaSoTuDongBLL();
                try
                {
                    string _ms = _mstd.TaoMaTuDong("NhanVien");
                    this.LabelMaNhanVien.Text = _ms;

                    // Lệnh thục hiện: Thêm mới
                    this.ButtonLuu.Text = "Lưu";
                }
                catch (Exception ex)
                {
                    Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
                }

                // Lệnh thực hiện: Thêm mới
                this.ButtonLuu.Text = "Lưu";
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region Phương thức xóa textbox
        /// <summary>
        /// Phương thức xóa textbox
        /// </summary>
        private void XoaText()
        {
            this.TextBoxHoTen.Text = "";
            this.TextBoxEmail.Text = "";
            this.TextBoxHoTen.Focus();
        }
        #endregion

        #region Phương thức load tình trạng: kích hoạt hay chưa kích hoạt
        /// <summary>
        /// Phương thức load tình trạng: kích hoạt hay chưa kích hoạt
        /// </summary>
        /// <param name="tinhtrang"></param>
        /// <returns></returns>
        protected string LoadTinhTrang(object tinhtrang)
        {
            int _result = (int)tinhtrang;
            return _result == 1 ? "Đã kích hoạt" : "Chưa kích hoạt";
        }
        #endregion

        #region Phương thức load quyền: Administrator, nhân viên
        /// <summary>
        /// Phương thức load quyền: Nhân viên, Administrator, Ban giám đốc
        /// </summary>
        /// <param name="quyen"></param>
        /// <returns></returns>
        protected string LoadQuyen(object quyen)
        {
            int _result = (int)quyen;
            if (_result == 0)
                return "Nhân viên";
            if (_result == 1)
                return "Administrator";
            return "Ban giám đốc";
        }
        #endregion

        #region ButtonTroLai_Click
        protected void ButtonTroLai_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("~/Admin/NhanVien.aspx");
        }
        #endregion

        #region btnLuu_Click
        protected void btnLuu_Click(object sender, EventArgs e)
        {
            _nvBLL = new NhanVienBLL();
            _nvDTO = new NhanVienDTO();

            try
            {
                _nvDTO.MaNhanVien = this.LabelMaNhanVien.Text;
                _nvDTO.TenNhanVien = this.TextBoxHoTen.Text;
                _nvDTO.Email = this.TextBoxEmail.Text;
                _nvDTO.ChucVu = this.DropDownListChucVu.SelectedValue;
                _nvDTO.Quyen = Convert.ToInt32(this.DropDownListChucVu.SelectedIndex);

                // Token
                _nvDTO.Token = this.LabelToken.Text;

                if (this.CheckBoxTinhTrang.Checked == true)
                    _nvDTO.TinhTrang = 1;
                else
                    _nvDTO.TinhTrang = 0;

                // Trường hợp thêm mới
                if (this.ButtonLuu.Text.Equals("Lưu"))
                {
                    // Lưu thông tin xuống CSDL
                    if (_nvBLL.Them(_nvDTO) != -1)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Thêm mới thành công');", true);

                        this.PanelDanhSachNhanVien.Visible = true;
                        this.PanelThemSuaNhanVien.Visible = false;
                        // Load data vào gridview
                        this.LoadDuLieu();
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Thêm mới không thành công. Xin kiểm tra lại thông tin');", true);
                        this.TextBoxHoTen.Focus();
                    }
                    return;
                }
                // Trường hợp cập nhật
                if (this.ButtonLuu.Text.Equals("Cập nhật"))
                {
                    if (_nvBLL.Sua(_nvDTO) != -1)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Cập nhật thành công');", true);
                        // Load lại Gridview
                        this.LoadDuLieu();
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Cập nhật không thành công. Xin kiểm tra lại thông tin');", true);
                        this.TextBoxHoTen.Focus();
                    }
                }

            }
            catch (Exception ex)
            {
                string error = ex.Message;
                if (error.Equals("(*) Đã tồn tại email này !"))
                {
                    this.LabelTonTaiEmail.Text = ex.Message;
                    this.LabelTonTaiEmail.Visible = true;
                    return;
                }
                this.LabelTonTaiEmail.Visible = false;

                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region btnNhaplai_Click
        protected void btnNhaplai_Click(object sender, EventArgs e)
        {
            this.XoaText();
        }
        #endregion

        #region GridViewNhanVien_PageIndexChanging
        protected void GridViewNhanVien_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                GridViewNhanVien.PageIndex = e.NewPageIndex;
                this.LoadDuLieu();
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewNhanVien_RowDataBound
        protected void GridViewNhanVien_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowIndex >= 0)
                {
                    e.Row.Attributes.Add("onMouseOver", "this.style.backgroundColor='#bde2fd'");

                    if (e.Row.RowIndex % 2 == 0)
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='#EFF3FB'");
                    else
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='White'");

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewNhanVien_RowCommand
        protected void GridViewNhanVien_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "Block")
                {
                    string _manv = e.CommandArgument.ToString();
                    _nvDTO = new NhanVienDTO();
                    _nvBLL = new NhanVienBLL();

                    _nvDTO = _nvBLL.GetNhanVien(_manv);
                    _nvDTO.TinhTrang = 0; // Cập nhật tình trạng = 0

                    if (_nvBLL.Sua(_nvDTO) != -1)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã khóa tài khoản thành công');", true);
                        // Hiển thị Panel danh sách
                        this.PanelDanhSachNhanVien.Visible = true;

                        // Ẩn Panel thêm, sửa
                        this.PanelThemSuaNhanVien.Visible = false;

                        // Load lại Gridview
                        this.LoadDuLieu();
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Khóa tài khoản không thành công. Xin kiểm tra lại thông tin');", true);
                        this.TextBoxHoTen.Focus();
                    }
                }

            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewNhanVien_RowEditing
        protected void GridViewNhanVien_RowEditing(object sender, GridViewEditEventArgs e)
        {
            try
            {
                _nvBLL = new NhanVienBLL();
                _nvDTO = new NhanVienDTO();
                this.XoaText();

                // Ẩn Panel danh sách
                PanelDanhSachNhanVien.Visible = false;

                // Hiển thị Panel thêm, sửa nhân viên
                PanelThemSuaNhanVien.Visible = true;

                LabelTitle.Text = "Cập nhật thông tin nhân viên";
                Label _manv = (Label)GridViewNhanVien.Rows[e.NewEditIndex].FindControl("LabelMaNhanVien");
                this.LabelMaNhanVien.Text = _manv.Text;

                _nvDTO = _nvBLL.GetNhanVien(this.LabelMaNhanVien.Text);

                this.LabelMaNhanVien.Text = _nvDTO.MaNhanVien;
                this.TextBoxHoTen.Text = _nvDTO.TenNhanVien;
                this.TextBoxEmail.Text = _nvDTO.Email;
                this.DropDownListChucVu.SelectedValue = _nvDTO.ChucVu;
                this.LabelToken.Text = _nvDTO.Token;

                if (_nvDTO.TinhTrang == 1)
                    this.CheckBoxTinhTrang.Checked = true;
                else
                    this.CheckBoxTinhTrang.Checked = false;

                ButtonLuu.Text = "Cập nhật";
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region CheckBoxItem_CheckedChanged
        protected void CheckBoxItem_CheckedChanged(object sender, EventArgs e)
        {

        }
        #endregion

        #region ImageButtonXoa_Click
        protected void ImageButtonXoa_Click(object sender, ImageClickEventArgs e)
        {

            try
            {
                int _flag = 0;
                // Khi button xóa được click:
                // Lấy danh sách mã nhân viên từ List<>
                // Loop từng mã nhân viên và xóa

                _lst = new List<NhanVienDTO>();
                int _n = GridViewNhanVien.Rows.Count;
                for (int i = 0; i < _n; i++)
                {
                    _nvDTO = new NhanVienDTO();
                    GridViewRow _gvr = GridViewNhanVien.Rows[i];
                    bool _ischecked = ((CheckBox)_gvr.Cells[0].FindControl("CheckBoxItem")).Checked;
                    if (_ischecked == true) // Dòng đó được check
                    {
                        _flag = 1; // Xác nhận checkbox có check
                        // Tìm mã nhân viên
                        Label _mabv = (Label)_gvr.Cells[0].FindControl("LabelMaNhanVien");

                        _nvDTO.MaNhanVien = _mabv.Text;

                        // Lưu vào list
                        this._lst.Add(_nvDTO);
                    }
                }

                if (_flag == 1)
                {
                    // Tới đây là ta đã có 1 List<int> mã nhân viên
                    // Loop all, gọi hàm xóa 1 nhân viên
                    _nvBLL = new NhanVienBLL();
                    string _id = "";

                    int _n2 = this._lst.Count;
                    for (int i = 0; i < _n2; i++)
                    {
                        _nvBLL.Xoa(this._lst[i]);
                        _id += this._lst[i].MaNhanVien.ToString();
                        if (i < _n2 - 1)
                        {
                            _id += ",";
                        }
                    }

                    // Thông báo cho user biết đã xóa các dòng nào

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã xóa thành công các dòng có ID = " + _id + " ');", true);

                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                else // Ko có checkbox nào được check
                {
                    // Thông báo cho user biết chưa chọn dòng nào
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Bạn chưa chọn dòng nào để xóa !');", true);

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion


    }
}